package be.vdab.servlets;

import java.io.IOException;
import java.util.ArrayList;
import java.util.List;

import javax.servlet.ServletException;
import javax.servlet.annotation.WebServlet;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;

import be.vdab.entities.Land;
import be.vdab.entities.Soort;
import be.vdab.entities.Wijn;
import be.vdab.entities.WijnInfo;
import be.vdab.services.LandService;
import be.vdab.services.SoortService;
import be.vdab.services.WijnService;

/**
 * Servlet implementation class WijnToevoegenServlet
 */
@WebServlet("/wijnen/toevoegen.htm")
public class WijnToevoegenServlet extends HttpServlet {
	private static final long serialVersionUID = 1L;
    private static final String VIEW = "/WEB-INF/JSP/wijnen/toevoegen.jsp";
    private static final String REDIRECT_CORRECT_URL = "/wijnen/mandje.htm";
    //private static final String REDIRECT_INCORRECT_URL = "/wijnen/toevoegen.htm";
    private final LandService landService = new LandService();
	private final SoortService soortService = new SoortService();
	private final WijnService wijnService = new WijnService();
	private final String FOUTMELDING = "Geef een geheel getal groter dan 1 in!";
	
	
    protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	HttpSession session = request.getSession();
    	if (session.getAttribute("bestellingen") == null) {
    		List<WijnInfo> bestellingen = new ArrayList<>();
    	    session = request.getSession();
    	    session.setAttribute("bestellingen", bestellingen);
    	}
    	
    	session.removeAttribute("fouten");
    	
    	long landNr = Long.parseLong(request.getParameter("vlagNr"));
    	long soortNr = Long.parseLong(request.getParameter("soortNr"));
    	long wijnNr = Long.parseLong(request.getParameter("wijnNr"));
    	Land land = landService.readLand(landNr);
    	Soort soort = soortService.readSoort(soortNr);
    	Wijn wijn = wijnService.readWijn(wijnNr);
    	WijnInfo wijnInfo = new WijnInfo(land, soort, wijn);
    	request.setAttribute("wijnInfo", wijnInfo);
    	session.setAttribute("wijnInfo", wijnInfo);
    	
    	request.getRequestDispatcher(VIEW).forward(request, response);
    }
    
    protected void doPost(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
    	HttpSession session = request.getSession();
    	WijnInfo wijnInfo = (WijnInfo) session.getAttribute("wijnInfo");
    	List<String> fouten = new ArrayList<>();
    	
    	if (request.getParameter("aantalFlessen") == null){
    		fouten.add(FOUTMELDING);
    	} else {
    		try {
    			int aantal = Integer.parseInt(request.getParameter("aantalFlessen"));
    			if (aantal < 1) {
    				fouten.add(FOUTMELDING);
    			} 
    		} catch (NumberFormatException ex){
    			fouten.add(FOUTMELDING);
    			
    		}
    	}
    	
    	if (!fouten.isEmpty()){
			request.setAttribute("fouten", fouten);
			//session.setAttribute("melding", "Test");
			//String parameterString = "?vlagNr=" + wijnInfo.getLand().getLandNr() + "&soortNr=" + wijnInfo.getSoort().getSoortNr() + "&wijnNr=" + wijnInfo.getWijn().getWijnNr();
    		//response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + REDIRECT_INCORRECT_URL + parameterString));
    		request.getRequestDispatcher(VIEW).forward(request, response);
    	} else {
    		wijnInfo.setAantal(Integer.parseInt(request.getParameter("aantalFlessen")));
    		@SuppressWarnings("unchecked")
			List<WijnInfo> extraBestelling = (ArrayList<WijnInfo>) session.getAttribute("bestellingen");
    		extraBestelling.add(wijnInfo);
    		session.setAttribute("bestellingen", extraBestelling);
    		session.removeAttribute("wijnInfo");
    		response.sendRedirect(response.encodeRedirectURL(request.getContextPath() + REDIRECT_CORRECT_URL));
    	}
    }
    	
    	
    
}
